package top.anonyeast.pojo;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PostMapping;

import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("user_info_software_test")
@Component
public class User {
    String username;//用户名
    String password;//密码
    String email;//角色名

    /**
     * 校验用户名
     * @param username
     * @return
     */
    public boolean checkUsername(String username){
        //6-12位的字母/数字/下划线，不能以数字开头
        String regExp = "^[^0-9][a-zA-Z0-9_]{5,11}$";
        return username.matches(regExp);
    }

    /**
     * 校验密码
     * @param password
     * @return
     */
    public boolean checkPassword(String password){
        //6-20位的字母/数字/符号(~!@#$%^&*()_.)两种及以上组合
        String regExp = "^(?!^(\\d+|[a-zA-Z]+|[~!@#$%^&*()_.]+)$)^[\\w~!@#$%^&*()_.]{6,20}$";
        return password.matches(regExp);
    }

    /**
     * 校验邮箱
     * @param email
     * @return
     */
    public boolean checkEmail(String email){
        /*
            @前：
            1.第一个非空白字符（有效字符）,只能是字母、数字、下划线
            2.@前的部分不能出现连续的..,但是允许.-或者-.
            3.从第二个字符开始，除了字母、数字、下划线，还支持中划线-和英文句号.

            @后：
            1.@后面第一个字符是字母、数字
            2.最后一个.后面只能接字母
            3.邮箱以.+ 至少一个字母结尾
            4.@后面，从第二个字符开始允许.或者-,但是不允许..,.-,-.的出现..和-需要和字母数字下划线间隔出现
         */
        String regExp = "^\\w+(?:\\.{0,1}[\\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\\.[a-zA-Z]+$";
        return email.matches(regExp);
    }

    /**
     * 检验用户信息是否合法
     * @param user
     * @return
     */
    public boolean checkUserIsValid(User user){
        return checkUsername(user.getUsername()) && checkPassword(user.getPassword()) && checkEmail(user.getEmail());
    }
}
